:- table a/2.
:- table b/2.

tw1 :- generate(b(1,_)), generate(a(1,_)).

generate(Call) :- call(Call), write(Call), nl, fail.
generate(_).

a(X,Y) :- b(X,Y).
a(X,Y) :- q(X,Y).
a(X,Y) :- a(X,Z), a(Z,Y).

b(X,Y) :- p(X,Y).
b(X,Y) :- b(X,Z), p(Z,Y).

p(1,2).
p(2,3).
p(3,4).
p(4,5).
p(4,1).
p(5,1).

q(1,7).
q(7,8).
q(8,7).
q(8,9).
q(8,10).
q(1,1).

